package org.robotlegs.mvcs
{
	import flash.display.DisplayObjectContainer;
	import flash.events.Event;
	import flash.events.IEventDispatcher;
	
	import org.robotlegs.core.ICommandMap;
	import org.robotlegs.core.IInjector;
	import org.robotlegs.core.IMediatorMap;
	

	/**
	 * 被 Mediators, Services, Models, 和其它 Command 广播的框架事件触发. 
	 * 典型的, 触发这个 Command 的事件会被注入到这个 Command, 以提供对其属性/负载的访问
	 * 
	 * 一个被映射的 command 在响应一个框架事件时被实例化, 所有已被映射,
	 * 并被 [Inject] 元数据标签标记过的依赖都会被注入到这个 Command.
	 * 另外, 触发这个 Command 的事件实例也会被注入. 当这些依赖被注入完毕, 
	 * Command 的执行方法会被自动调用, Command 便会进行它的工作. 
	 * 
	 * 你不需要, 而且不应该直接调用 execute() 方法. 这是框架的工作.
	 *-----------------------------------------------------------------------------
	 * 链接 command 也是可行的
	 */
public class Command
{
	public function Command()
	{
	}
	
	

	[Inject]
	public var contextView:DisplayObjectContainer;
	
	[Inject]
	public var commandMap:ICommandMap;
	
	[Inject]
	public var eventDispatcher:IEventDispatcher;
	
	[Inject]
	public var injector:IInjector;
	
	[Inject]
	public var mediatorMap:IMediatorMap;

	
	
	public function execute():void
	{
	}
	

	protected function dispatch(event:Event):Boolean
	{
		if(eventDispatcher.hasEventListener(event.type))
			return eventDispatcher.dispatchEvent(event);
		return false;  
	}
}
}